from PyQt5.QtWidgets import QApplication, QMainWindow, QTextBrowser
from PyQt5.QtCore import Qt

class LogWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.log_browser = QTextBrowser(self)
        self.log_browser.setOpenExternalLinks(True)
        self.log_browser.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
        self.log_browser.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        self.log_browser.ensureCursorVisible()

        layout = QVBoxLayout()
        layout.addWidget(self.log_browser)
        central_widget = QWidget()
        central_widget.setLayout(layout)
        self.setCentralWidget(central_widget)

    def append_log(self, log_message):
        self.log_browser.append(log_message)
        cursor = self.log_browser.textCursor()
        cursor.movePosition(QTextCursor.End)
        self.log_browser.setTextCursor(cursor)  # 自动滚动到最后一条日志

app = QApplication([])

window = LogWindow()
window.show()

# 添加一些日志示例
for i in range(100):
    window.append_log(f"Log entry #{i}: This is a sample log message.")

app.exec_()
# 在这个例子中，append_log 方法用于向 QTextBrowser 中追加日志条目，并通过移动文本光标到最后确保每次添加新的日志都会使视图自动滚动到底部，显示出最新的日志内容。如果日志数量过多导致需要滚动查看旧的日志，用户可以通过滚动条查阅。